# -*- coding: utf-8 -*-
# ㊎ Author : xmz
# ㊍ Date:  : 2024/12/7 上午10:49
# ㊌ File   : leastUsedTracker.py
# ㊋ IDE    : PyCharm
# ㊏ REMARKS: 最少使用跟踪器, 用于记录每个块的访问次数,并返回使用次数最少的块

from collections import defaultdict
from time import sleep


class LeastUsedTracker:
    def __init__(self, elements):
        """
        初始化，传入一个数据组列表
        :param elements: 数据组列表
        """
        self.usage_count = defaultdict(int)  # 存储每个元素的使用次数
        self.elements = list(elements)  # 存储元素列表

    def get_next(self):
        """
        获取使用次数最少的元素，更新其使用次数，并返回排序结果
        :return: 当前元素及使用次数排序的列表
        """
        if not self.elements:
            return None  # 如果没有元素，返回 None

        # 按使用次数升序获取使用次数最少的元素
        least_used = min(self.elements, key=lambda x: self.usage_count[x])
        # 更新该元素的使用次数
        self.usage_count[least_used] += 1
        # 返回当前使用次数排序的元素列表
        sorted_elements = sorted(self.elements, key=lambda x: self.usage_count[x])
        return least_used, [(elem, self.usage_count[elem]) for elem in sorted_elements]


# 示例代码
if __name__ == "__main__":
    data = ["apple", "banana", "orange", "grape"]
    tracker = LeastUsedTracker(data)

    for _ in range(10):  # 循环调用获取函数
        least_used, sorted_elements = tracker.get_next()
        print(f"当前获取的元素: {least_used}")
        print(f"按使用次数排序: {sorted_elements}")
        print("-" * 30)
        sleep(1)
